package org.relaxng.datatype;

/**
 * An interface that must be implemented by caller to provide context
 * information that is necessary to perform validation of some Datatypes.
 * 
 * @author <a href="mailto:jjc@jclark.com">James Clark</a>
 * @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a>
 */
public interface ValidationContext
{

  /**
   * Resolves a namespace prefix to the corresponding namespace URI. This method
   * is used for validating the QName type, for example.
   * <p>
   * If the prefix is "" (empty string), it indicates an unprefixed value. The
   * callee should resolve it as for an unprefixed element, rather than for an
   * unprefixed attribute.
   * <p>
   * If the prefix is "xml", then the callee must resolve this prefix into
   * "http://www.w3.org/XML/1998/namespace", as defined in the XML Namespaces
   * Recommendation.
   * 
   * @return namespace URI of this prefix. If the specified prefix is not
   *         declared, the implementation must return null.
   */
  String resolveNamespacePrefix (String prefix);

  /**
   * Returns the base URI of the context. The null string may be returned if no
   * base URI is known.
   */
  String getBaseUri ();

  /**
   * Checks if an unparsed entity is declared with the specified name.
   * 
   * @return true if the DTD has an unparsed entity declaration for the
   *         specified name. false otherwise.
   */
  boolean isUnparsedEntity (String entityName);

  /**
   * Checks if a notation is declared with the specified name.
   * 
   * @return true if the DTD has a notation declaration for the specified name.
   *         false otherwise.
   */
  boolean isNotation (String notationName);
}
